package com.example.study2;

import java.util.ArrayList;
import java.util.List;

public class ArrayListOperations {
    public static void main(String[] args) {
        // 初始化ArrayList
        ArrayList<String> fruits = new ArrayList<>();

        // 1. add(E e) - 添加元素到末尾
        fruits.add("Apple");
        fruits.add("Banana");
        System.out.println("初始列表: " + fruits);  // [Apple, Banana]

        // 2. add(int index, E element) - 插入元素到指定位置
        fruits.add(1, "Orange");
        System.out.println("插入 Orange 后: " + fruits); // [Apple, Orange, Banana]

        // 3. addAll(Collection<? extends E> c) - 尾部添加另一个集合的所有元素
        List<String> moreFruits = new ArrayList<>();
        moreFruits.add("Mango");
        moreFruits.add("Grape");
        boolean isAllAdded = fruits.addAll(moreFruits);
        System.out.println("添加集合后: " + fruits); // [Apple, Orange, Banana, Mango, Grape]

        // 4. remove(int index) - 删除指定索引元素
        String removedFruit = fruits.remove(0); // 把下表为0的Apple删掉了
        System.out.println("删除索引0后的列表: " + fruits); // [Orange, Banana, Mango, Grape]

        // 5. remove(Object o) - 删除指定元素
        boolean isRemoved = fruits.remove("Banana"); // 把Banana这个元素删掉了
        System.out.println("删除 Banana 后的列表: " + fruits); // [Orange, Mango, Grape]

        // 6. get(int index) - 获取元素
        String fruit = fruits.get(1); // 获取下标为1的元素
        System.out.println("索引1的元素: " + fruit);// Mango

        // 7. set(int index, E element) - 替换元素
        String oldFruit = fruits.set(2, "Peach"); // 将下标为2的Grape元素替换为Peach
        System.out.println("替换后的列表: " + fruits); // [Orange, Mango, Peach]

        // 8. size() - 返回元素数量
        int size = fruits.size();
        System.out.println("列表大小: " + size);// 3

        // 9. contains(Object o) - 判断是否包含元素
        boolean hasOrange = fruits.contains("Orange"); // 判断是否包含Orange元素
        System.out.println("是否包含 Orange: " + hasOrange);

        // 10. indexOf(Object o) - 返回元素首次出现的索引
        fruits.add("Mango");
        System.out.println(fruits);// [Orange, Mango, Peach, Mango]
        int firstIndex = fruits.indexOf("Mango");
        System.out.println("Mango 首次出现的位置: " + firstIndex);// 1

        // 11. lastIndexOf(Object o) - 返回元素最后一次出现的索引
        int lastIndex = fruits.lastIndexOf("Mango");
        System.out.println("Mango 最后一次出现的位置: " + lastIndex);// 3

        // 12. subList(int fromIndex, int toIndex) - 截取部分
        System.out.println(fruits);// [Orange, Mango, Peach, Mango]
        List<String> subList = fruits.subList(1, 3); // 范围 [1, 3)，包含索引1和2
        System.out.println("截取: " + subList); // [Mango, Peach]
        // 修改子列表会影响原列表
        subList.set(1, "Cherry");
        System.out.println("修改子列表后的原列表: " + fruits); // [Orange, Mango, Cherry, Mango]

        // 13. clear() - 清空列表
        fruits.clear();
        System.out.println("清空后的列表: " + fruits); // []

        // 14. isEmpty() - 判断列表是否为空
        boolean isEmpty = fruits.isEmpty();
        System.out.println("列表是否为空: " + isEmpty);// true
    }
}
